package com.jeecg.p3.base.util;

import org.apache.commons.io.FileUtils;
import org.jeecgframework.p3.core.utils.common.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.InputStream;

public class UploadUtil {
    private static Logger log = LoggerFactory.getLogger(UploadUtil.class);
    /**
     * 上传单个文件
     *
     * @param inputStream 文件流
     * @param path        文件路径，如：image/
     * @param filename    文件名，如：test.jpg
     * @return 成功：上传后的文件访问路径，失败返回：null
     */
    public static String upload(InputStream inputStream, String path, String filename) {
        //创建文件夹
        createDirIfNotExists(path);
        //存文件
        File uploadFile = new File(path, filename);
        try {
            FileUtils.copyInputStreamToFile(inputStream, uploadFile);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return uploadFile.getPath();
    }

    /**
     * 创建文件夹路径
     */
    private static void createDirIfNotExists(String path) {
        File file = new File(path);
        if (!file.exists()) {
            file.mkdirs();
        }
    }

    /**
     * 删除文件
     *
     * @param path 文件访问的路径upload开始 如： /upload/image/test.jpg
     * @return true 删除成功； false 删除失败
     */
    public static boolean delete(String path) {
        File file = new File(path);
        return file.exists() == true ? file.delete() : true;
    }

    /**
     * 获取服务部署根路径 http:// + ip + port
     *
     * @param request
     * @return
     */
    public static String getServerIPPort(HttpServletRequest request) {
        //+ ":" + request.getServerPort()
        return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
    }

    /**
     * 获取可以创建的文件名（如果有同名文件存在，参照Windows系统重命名为xxx(2).xxx)
     * @param name
     * @param index
     * @return
     */
    public static File getAvailableFile(String name, int index){
        File newFile = null;
        String suffix = StringUtils.substringAfterLast(name, ".");
        String filePath = StringUtils.substringBeforeLast(name, ".");
        if(index == 0 ){
            newFile = new File(filePath+"."+suffix);
        }else{
            newFile = new File(filePath+"("+index+")"+"."+suffix);
        }
        if(newFile.exists()){
            return  getAvailableFile(name,index+1);
        }else{
            return  newFile;
        }
    }

    /**
     * 创建目录
     * @param descDirName 目录名,包含路径
     * @return 如果创建成功，则返回true，否则返回false
     */
    public static boolean createDirectory(String descDirName) {
        String descDirNames = descDirName;
        if (!descDirNames.endsWith(File.separator)) {
            descDirNames = descDirNames + File.separator;
        }
        File descDir = new File(descDirNames);
        if (descDir.exists()) {
            log.debug("目录 " + descDirNames + " 已存在!");
            return false;
        }
        // 创建目录
        if (descDir.mkdirs()) {
            log.debug("目录 " + descDirNames + " 创建成功!");
            return true;
        } else {
            log.debug("目录 " + descDirNames + " 创建失败!");
            return false;
        }

    }
}
